package com.itheima.edu.manager.dao;

import com.itheima.edu.manager.domain.Teacher;

/*
    库管类专门负责处理数据.
        1. 接收业务员传过来的业务数据
        2. 将数据拿到系统数据仓库中进行增删改查
        3. 将处理的结果给到业务员
 */
public class TeacherDao implements BaseTeacherDao{
    //1.定义一个系统数据仓库: 数组实现
    private static Teacher[] teat = new Teacher[5];

    //静态代码块:随着类的加载而加载,自动执行!
    //作用:一般都会用来做数据的初始化,系统配置的加载!
    static {
        System.out.println("--------系统数据加载中Loading--------");
        Teacher tea = new Teacher("heima001","柳岩","36","1999-11-11");
        Teacher stu2 = new Teacher("heima002","杨幂","32","1999-11-11");
        //将学生对象存入数组容器
        teat[0] = tea;
        teat[1] = stu2;
    }

    //库管类中的添加老师功能
    public boolean addTeacher(Teacher tea) {
        //2.通过标记位思想来确定本次要添加的学生对象存入的位置
        //先假设数组已经存满了
        int index = -1;

        //遍历数组容器
        for (int i = 0; i < teat.length; i++) {
            //获取每一个索引位置的元素
            //只有当前索引位置的元素为null,说明这个位置还空着,还可以存数据!
            if(teat[i] == null){
                //将当前索引位置记录到index
                index = i;
                break;
            }
        }
        //3.根据index的值来决定本次添加结果
        if(index == -1){
            //存满了,则本次无法添加了,返回false,表示添加失败!
            return false;
        }else {
            //不是-1,说明数组容器还没存满,还有位置可以存
            //1.将本次要添加的学生对象存入数组
            teat[index] = tea;
            //2.返回true,表示添加成功
            return true;
        }
    }

    //库管类中的查看老师功能
    public Teacher[] findAllTeacher() {
        return teat;
    }

    //库管类中的删除老师功能
    public boolean deleteTeacher(String deleteId) {
        //1.找到本次要删除的学号所对应的老师对象在数组中所对应的索引位置
        int index = getIndex(deleteId);

        //2.根据index的值来决定是否删除成功
        if(index == -1){
            //说明传过来的工号在系统里不存在,直接返回false表示删除失败
            return false;
        }else {
            //不是-1说明传过来的工号在系统中存在,将值替换位null
            teat[index] = null;
            return true;
        }
    }

    //封装一个根据学号查找老师对象在数组中的索引位置的方法
    public int getIndex(String id){
        //先假设学号不存在
        int index = -1;
        //遍历数组
        for (int i = 0; i < teat.length; i++) {
            //取出数组中的每一个元素
            Teacher tea = teat[i];
            //当前索引位置的元素不为null并且该元素的学号要和修改的学号一致时,修改标记
            if(tea != null && tea.getId().equals(id)){
                //修改标记,记录当前学生对象的索引值
                index = i;
                break;
            }
        }
        //返回索引值
        return index;
    }

    //库管类中的修改老师功能
    public boolean updateTeacher(String updateId, Teacher newTea) {
        //1.根据要修改的工号找到对应的老师在数组中的索引位置
        int index = getIndex(updateId);

        //2.拿新的老师对象去替换该索引位置的老对象,从而达到修改目的
        teat[index] = newTea;
        return true;
    }
}
